package com.example.livemall.service.impl;


import com.example.livemall.dto.LzjResult;
import com.example.livemall.entity.Item;
import com.example.livemall.mapper.RecommendationMapper;
import com.example.livemall.service.RecommendationService;
import com.example.livemall.vo.ProductVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 热门推荐服务业务逻辑层
 */
@Service
public class RecommendationSeviceImpl implements RecommendationService {

    @Autowired
    private RecommendationMapper recommendationMapper;

    @Value("${origin}")
    private String origin;

    /**
     * 查询商品列表
     * 1. 入参 String city
     * 2. 根据销量倒序查询，获取前 4 个
     * 3. 必须且只能显示 4 个，不足时获取其他城市补足
     *
     * @param city
     * @return
     */
    @Override
    public LzjResult selectRecommendationList(String city) {
        // select * from item where city = 入参 and recommendation = true
        // 查询条件， 城市 = 参数值 and 是否推荐 = true
        // 查询结果可能不满足 4 个
        List<Item> itemList =  recommendationMapper.selectRecommendationList(city);// 假设查到 2 个
        itemList.stream()
                .map(item -> {
                    item.setInfo(recommendationMapper.selectInfo(item.getId()));
                    item.setImgs(recommendationMapper.selectImg(item.getId()));
                    return null;
                }).collect(Collectors.toList());


        // 必须且只能显示 4 个，不足时获取其他城市补足
        if (itemList.size() < 4) {
            // select * from item where city != 入参 and recommendation = true
            // 查询条件， 城市 = 参数值 and 是否推荐 = true
            // 排序和分页
            itemList.addAll(recommendationMapper.selectOtherRecommendationList(city, 4 - itemList.size()));
        }
        // 优化图片地址
        List<Item> resultItemList = changeItemList(itemList);

        List<ProductVo> list = resultItemList.stream()
                .map(item -> new ProductVo(item.getId(), item.getTitle(), item.getImgs().get(0), origin))
                .collect(Collectors.toList());
        // 成功返回
        return LzjResult.success("查询成功", list);
    }

    // 优化图片地址
    private List<Item> changeItemList(List<Item> itemList) {
        itemList.forEach(item ->
				item.setImgs(item.getImgs().stream().map(img -> origin + img).collect(Collectors.toList()))
		);
        return itemList;
    }

}